package com.czy.esp8266_onenet_control.Onenet;

import com.czy.esp8266_onenet_control.base.BaseController;
import com.czy.esp8266_onenet_control.base.BaseRep;
import com.czy.esp8266_onenet_control.javasdk.api.cmds.SendCmdsApi;
import com.czy.esp8266_onenet_control.javasdk.response.BasicResponse;
import com.czy.esp8266_onenet_control.javasdk.response.cmds.NewCmdsResponse;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.io.IOException;

/**
 * @Author:ethan
 * @Date: 2023/7/6  10:29
 * @Version 1.0.1
 */
@RestController
@RequestMapping(value = "/cmd")
public class CmdController extends BaseController {

    @RequestMapping(value = "/send")
    public BaseRep send(String devId, String cmd) throws IOException {

        /**
         * 发送命令
         * @param devId：接收该数据的设备ID（必选），String
         * @param qos:是否需要响应，默认为0,Integer
         * 0：不需要响应，即最多发送一次，不关心设备是否响应；
         * 1：需要响应，如果设备收到命令后没有响应，则会在下一次设备登陆时若命令在有效期内(有效期定义参见timeout参数）则会继续发送。
         * 对响应时间无限制，多次响应以最后一次为准。
         * 本参数仅当type=0时有效；
         * @param timeOut:命令有效时间，默认0,Integer
         * 0：在线命令，若设备在线,下发给设备，若设备离线，直接丢弃；
         *  >0： 离线命令，若设备在线，下发给设备，若设备离线，在当前时间加timeout时间内为有效期，有效期内，若设备上线，则下发给设备。单位：秒，有效围：0~2678400。
         *  本参数仅当type=0时有效；
         * @param type://默认0。0：发送CMD_REQ包，1：发送PUSH_DATA包
         * @param contents:用户自定义数据：json、string、二进制数据（小于64K）
         * @param key:masterkey或者设备apikey
         */
        SendCmdsApi api = new SendCmdsApi(devId, null, null, null, cmd, PRODUCT_MASTER_KEY);
        BasicResponse<NewCmdsResponse> response = api.executeApi();

        return BaseRep.success(response.getJson());
    }
}
